#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##############################################
# @Author: DengLibin 榆霖
# @Date: Create in 2022-03-03 14:31:49
# @Description: 属性
##############################################
'module name'
__author__ = 'DengLibin'
#if __name__ == '__main__':

# Python内置的@property装饰器就是负责把一个方法变成属性调用的：
class Student(object):
    @property
    def score(self):
        return self.__score
    
    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 and 100')
        self.__score = value
    
    # 只读属性 没有setter 
    @property    
    def age(self):
        return 23
    
    
s = Student()
s.score = 60   # OK，实际转化为s.set_score(60)
print(s.score) # OK，实际转化为s.get_score()

# 意到这个神奇的@property，我们在对实例属性操作的时候，就知道该属性很可能不是直接暴露的，而是通过getter和setter方法来实现的。

print(s.age) 
#s.age = 34 只读属性不能修改
